DuckDB 是一個 Google、Facebook、Airbnb、Okta、HuggingFace 都有在 Production 環境中使用的資料庫 ,當初設計上為的就是想加強 SQLite 在 in process 分析能力的不足。 簡言之某些分析型 SQL 跑在 DuckDB 跟跑在 SQLite 上都可以得到一樣的答案,但是DuckDB 在這些 SQL 上會比 SQLite 會快 10 倍。
經典的 OLAP query 像是
SELECT
employee_id, first_name, last_name, department,
salary,
RANK() OVER ( PARTITION BY department ORDER BY salary DESC ) AS salary_rank
FROM
employees
ORDER BY
department,
salary_rank;
書上會看到的 OLAP (線上分析處理)系統,主要是用來處理大量資料的分析。這種 query 會一次讀取整張表或是很多筆資料,然後進行一些像是彙總、平均、統計等聚合運算,通常用來做決策支援或是報表分析。這種情況下,查詢的速度雖然沒那麼即時,但強調的是如何快速處理大量資料,-可以-接受幾秒等級的處理時間。
相較之下,OLTP (線上交易處理) 系統的重點在於即時反應,像是我們常見的電商下單、轉帳這類操作,這時候的 query 通常只會處理一小部分資料,重點是要很快就能完成,讓使用者不會感覺卡卡的,-不可以-接受幾秒等級的處理時間。
簡單來說,OLAP 就是我們要分析一堆資料的時候,會用到的查詢;而 OLTP 是我們日常生活中,像訂餐、下單這類需要快速處理的查詢。兩者的差別就在於一個偏向資料分析,另一個偏向即時交易。
除了非常優異的性能,非常方便使用,也是 DuckDB 一個殺手級的功能.如果你想真的跑跑看上面那句 SQL,只需要點開以下網址,它會打開一個 Dukcdb WASM 的 console
然後輸入
SELECT
employee_id, first_name, last_name, department,
salary,
RANK() OVER ( PARTITION BY department ORDER BY salary DESC ) AS salary_rank
FROM
'https://ironman24.douenergy.com/employees.parquet'
ORDER BY
department,
salary_rank;
非常簡單易用吧,接下來的一個禮拜,我會告訴大家,Google、Facebook、Airbnb、Okta、HuggingFace 把DuckDB 用在什麼地方,並且什麼時候是適合用 DuckDB 的情境。
劇透:jq , sqlite , postgres , pandas